package com.ab.fragment;


import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.Animation;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.ab.util.AbAnimationUtil;
import com.ab.util.AbViewUtil;

/**
 * © 2012 amsoft.cn
 * 名称：AbLoadDialogFragment.java
 * 描述：弹出加载框
 *
 * @author 还如一梦中
 * @version v1.0
 * @date：2014-07-30 下午16:00:52
 */
public class AbFragment extends Fragment {

    private int mLoadDrawable;
    private int mRefreshDrawable;
    public String mLoadMessage = "正在查询,请稍候";
    public String mRefreshMessage = "请求出错，请重试";
    private int mTextSize = 15;
    private int mTextColor = Color.WHITE;
    private RelativeLayout rootView = null;
    public View mContentView;
    private LinearLayout mLoadView = null;
    private LinearLayout mRefreshView = null;
    private TextView mLoadTextView = null;
    private ImageView mLoadImageView = null;
    private TextView mRefreshTextView = null;
    private ImageView mRefreshImageView = null;
    private View mIndeterminateView = null;
    private AbFragmentOnLoadListener mAbFragmentOnLoadListener = null;

    /**
     * 创建
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        rootView = new RelativeLayout(this.getActivity());
        mContentView = onCreateContentView(inflater, container, savedInstanceState);
        //设置默认资源
        setResource();
        //先显示load
        showLoadView();
        return rootView;
    }

    /**
     * 显示View的方法（需要实现）
     *
     * @return
     */
    public View onCreateContentView(LayoutInflater inflater, ViewGroup container,
                                    Bundle savedInstanceState) {
        return null;
    }

    /**
     * 设置用到的资源（需要实现）
     */
    public void setResource() {

    }

    /**
     * 初始化加载View
     */
    public void initLoadView() {

        mLoadView = new LinearLayout(this.getActivity());
        mLoadView.setGravity(Gravity.CENTER);
        mLoadView.setOrientation(LinearLayout.VERTICAL);
        mLoadView.setPadding(20, 20, 20, 20);
        mLoadView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

        mLoadImageView = new ImageView(this.getActivity());
        mLoadImageView.setImageResource(mLoadDrawable);
        mLoadImageView.setScaleType(ScaleType.MATRIX);

        mLoadTextView = new TextView(this.getActivity());
        mLoadTextView.setText(mLoadMessage);
        mLoadTextView.setTextColor(mTextColor);
        mLoadTextView.setTextSize(mTextSize);
        mLoadTextView.setPadding(5, 5, 5, 5);

        mLoadView.addView(mLoadImageView, new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        mLoadView.addView(mLoadTextView, new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

        mLoadImageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 执行刷新
                load(v);
            }

        });

    }

    /**
     * 初始化刷新View
     */
    public void initRefreshView() {

        mRefreshView = new LinearLayout(this.getActivity());
        mRefreshView.setGravity(Gravity.CENTER);
        mRefreshView.setOrientation(LinearLayout.VERTICAL);
        mRefreshView.setPadding(20, 20, 20, 20);
        mRefreshView.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

        mRefreshImageView = new ImageView(this.getActivity());
        mRefreshImageView.setImageResource(mRefreshDrawable);
        mRefreshImageView.setScaleType(ScaleType.MATRIX);

        mRefreshTextView = new TextView(this.getActivity());
        mRefreshTextView.setText(mRefreshMessage);
        mRefreshTextView.setTextColor(mTextColor);
        mRefreshTextView.setTextSize(mTextSize);
        mRefreshTextView.setPadding(5, 5, 5, 5);

        mRefreshView.addView(mRefreshImageView, new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        mRefreshView.addView(mRefreshTextView, new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        mRefreshImageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 执行刷新
                load(v);
            }

        });

    }

    /**
     * 显示加载View
     */
    public void showLoadView() {
        if (rootView.getChildCount() > 0) {
            if (mLoadView == rootView.getChildAt(0)) {
                return;
            }
        }

        rootView.removeAllViews();
        if (mLoadView == null) {
            initLoadView();
        }
        AbViewUtil.removeSelfFromParent(mLoadView);
        rootView.addView(mLoadView);
        // 执行加载
        load(mLoadImageView);
    }

    /**
     * 显示刷新View
     */
    public void showRefreshView() {
        if (rootView.getChildCount() > 0) {
            if (mRefreshView == rootView.getChildAt(0)) {
                loadStop(mRefreshImageView);
                return;
            }
        }

        rootView.removeAllViews();
        if (mRefreshView == null) {
            initRefreshView();
        }
        AbViewUtil.removeSelfFromParent(mRefreshView);
        rootView.addView(mRefreshView);
    }

    /**
     * 显示内容View
     */
    public void showContentView() {
        if (rootView.getChildCount() > 0) {
            if (mContentView == rootView.getChildAt(0)) {
                return;
            }
        }

        rootView.removeAllViews();
        AbViewUtil.removeSelfFromParent(mContentView);
        rootView.addView(mContentView, new LinearLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

    /**
     * 显示内容View
     */
    public void showContentView(View view) {
        rootView.removeAllViews();
        AbViewUtil.removeSelfFromParent(mContentView);
        mContentView = view;
        rootView.addView(mContentView, new LinearLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    }

    /**
     * 加载完成调用
     */
    public void loadFinish() {
        //停止动画
        loadStop(mIndeterminateView);
    }

    /**
     * 加载结束
     */
    public void loadStop(final View view) {
        if (view == null) {
            return;
        }
        //停止动画
        view.postDelayed(new Runnable() {

            @Override
            public void run() {
                view.clearAnimation();
            }

        }, 200);
    }

    /**
     * 加载调用
     */
    public void load(View v) {
        if (mAbFragmentOnLoadListener != null) {
            mAbFragmentOnLoadListener.onLoad();
        }
        mIndeterminateView = v;
        AbAnimationUtil.playRotateAnimation(mIndeterminateView, 300, Animation.INFINITE,
                Animation.RESTART);
    }

    /**
     * 获取内容View
     *
     * @return
     */
    public View getContentView() {
        return mContentView;
    }

    /**
     * 获取加载View文字的尺寸
     *
     * @return
     */
    public int getTextSize() {
        return mTextSize;
    }

    /**
     * 设置加载View文字的尺寸
     *
     * @return
     */
    public void setTextSize(int textSize) {
        this.mTextSize = textSize;
    }

    public int getTextColor() {
        return mTextColor;
    }

    public void setTextColor(int textColor) {
        this.mTextColor = textColor;
    }

    public void setLoadMessage(String message) {
        this.mLoadMessage = message;
        if (mLoadTextView != null) {
            mLoadTextView.setText(mLoadMessage);
        }
    }

    public void setRefreshMessage(String message) {
        this.mRefreshMessage = message;
        if (mRefreshTextView != null) {
            mRefreshTextView.setText(mRefreshMessage);
        }
    }

    public int getLoadDrawable() {
        return mLoadDrawable;
    }

    public void setLoadDrawable(int resid) {
        this.mLoadDrawable = resid;
        if (mLoadImageView != null) {
            mLoadImageView.setBackgroundResource(resid);
        }
    }

    public int getRefreshDrawable() {
        return mRefreshDrawable;
    }

    public void setRefreshDrawable(int resid) {
        this.mRefreshDrawable = resid;
        if (mRefreshImageView != null) {
            mRefreshImageView.setBackgroundResource(resid);
        }
    }

    public void setBackgroundColor(int backgroundColor) {
        rootView.setBackgroundColor(backgroundColor);
    }

    public AbFragmentOnLoadListener getAbFragmentOnLoadListener() {
        return mAbFragmentOnLoadListener;
    }

    public void setAbFragmentOnLoadListener(
            AbFragmentOnLoadListener abFragmentOnLoadListener) {
        this.mAbFragmentOnLoadListener = abFragmentOnLoadListener;
    }

    /**
     * 加载事件的接口.
     */
    public interface AbFragmentOnLoadListener {

        /**
         * 加载
         */
        public void onLoad();

    }

}
